import { defineStore } from 'pinia'
import { ref } from 'vue'
import { storeLogger } from '@/utils/logger'

export const useAppStore = defineStore('app', () => {
  // 应用状态
  const loading = ref(false)
  const flinkEnvironments = ref([])
  // Flink 环境选择（在 loadFlinkEnvironments 中设置默认值）
  const currentFlinkEnv = ref('')
  const sidebarCollapsed = ref(false)
  
  // 对话框状态
  const showJobRestartDialog = ref(false)
  const showBulkOperationDialog = ref(false)
  
  // 初始化应用
  const init = async () => {
    try {
      loading.value = true
      // 加载Flink环境配置
      await loadFlinkEnvironments()
    } catch (error) {
      storeLogger.error('应用初始化失败:', error)
    } finally {
      loading.value = false
    }
  }
  
  // 加载Flink环境配置
  const loadFlinkEnvironments = async () => {
    try {
      const response = await fetch('/api/settings?service_type=flink')
      const data = await response.json()
      
      if (data.success && data.data && data.data.flink) {
        flinkEnvironments.value = Object.keys(data.data.flink).map(name => ({
          name,
          ...data.data.flink[name]
        }))
        
        // 每次刷新都强制使用默认环境 FLINK(68)
        const defaultEnv = flinkEnvironments.value.find(env => env.name === 'FLINK(68)')
        if (defaultEnv) {
          currentFlinkEnv.value = defaultEnv.name
        } else if (flinkEnvironments.value.length > 0) {
          // 如果没找到68，选择第一个配置
          currentFlinkEnv.value = flinkEnvironments.value[0].name
        }
        // 更新 localStorage（用户切换环境时会保存，但刷新后会重置为68）
        localStorage.setItem('currentFlinkEnv', currentFlinkEnv.value)
        
        storeLogger.info('加载Flink环境配置成功', { 
          count: flinkEnvironments.value.length, 
          selected: currentFlinkEnv.value 
        })
      }
    } catch (error) {
      storeLogger.error('加载Flink环境配置失败:', error)
    }
  }
  
  // 设置当前Flink环境
  const setCurrentFlinkEnv = (envName) => {
    currentFlinkEnv.value = envName
    // 持久化到 localStorage
    localStorage.setItem('currentFlinkEnv', envName)
  }
  
  // 获取当前Flink环境配置
  const getCurrentFlinkEnvConfig = () => {
    return flinkEnvironments.value.find(env => env.name === currentFlinkEnv.value)
  }

  // 切换侧边栏 - 使用防抖避免快速切换
  const toggleSidebar = () => {
    sidebarCollapsed.value = !sidebarCollapsed.value
  }
  
  return {
    // 状态
    loading,
    flinkEnvironments,
    currentFlinkEnv,
    sidebarCollapsed,
    showJobRestartDialog,
    showBulkOperationDialog,
    
    // 方法
    init,
    loadFlinkEnvironments,
    setCurrentFlinkEnv,
    getCurrentFlinkEnvConfig,
    toggleSidebar
  }
})
